/*
 * Proyecto Manejador de Proyectos
 * @Autor Hector Hurtado
 */
package Mproyectos.controladores;

import Mproyectos.entidades.Asesor;
import Mproyectos.modelo.FachadaAsesor;
import java.io.Serializable;
import java.util.Collection;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 * Controla el CRUD del Asesor
 */
@ManagedBean(name = "controladorAsesor")
@SessionScoped
public class ControladorAsesor implements Serializable{

    /**
     * Asesor en creacion o actualizacion
     */
    private Asesor asesor;
    /**
     * Fachada de acceso a los datos
     */
    @EJB
    private FachadaAsesor fachadaAsesor;

    /**
     * Constructor vacio
     */
    public ControladorAsesor() {
    }

    /**
     * Devuelve el asesor en creacion o edicion
     *
     * @return asesor a crear o actualizar
     */
    public Asesor getAsesor() {

        // Si el asesor esta vacio crear uno 
        if (asesor == null) {
            asesor = new Asesor();
        }

        // Retorna el asesor actual
        return asesor;
    }

    /**
     * Actualiza el asesor en edicion o creacion
     *
     * @param asesor actual
     */
    public void setAsesor(Asesor asesor) {
        this.asesor = asesor;
    }

    /**
     * Devuelve todos los asesores registrados en el sistema
     *
     * @return Lista de asesores
     */
    public Collection<Asesor> getAsesores() {
        return fachadaAsesor.listar();
    }

    /**
     * Adiciona a la unidad de persistencia el asesor actual
     *
     * @return Nombre de la pagina despues de crear
     */
    public String crear() {
        // Adiciona el asesor 
        fachadaAsesor.adicionar(getAsesor());
        asesor=null;
        // Se va para la pagina de listar asesor 
        return "listar";
    }

    /**
     * Elimina el asesor especificado y retorna a la lista
     *
     * @param asesor a eliminar
     * @return Pagina a la quer se devuelve
     */
    public String eliminar(Asesor asesor) {
        fachadaAsesor.eliminar(asesor);
        return "listar";
    }

    /**
     * Asigna el asesor especificado como el asesor actual y llama a la pagina
     * de actualizar
     *
     * @param asesor a actualizar
     * @return devuelve a la pagina de actualizacion
     */
    public String prepararActualizar(Asesor asesor) {
        // Asigna el asesor seleccionado desde la lista como  el actual 
        this.asesor = asesor;
        return "actualizar";
    }

    /**
     * Actualiza los datos del asesor actual
     *
     * @return devuelve a la lista
     */
    public String actualizar() {
        fachadaAsesor.actualizar(asesor);
        return "listar";
    }

    /**
     * Retorna la fachada de los asesores
     *
     * @return fachada de los asesores
     */
    public FachadaAsesor getFachadaAsesor() {
        return fachadaAsesor;
    }
}